package com.health;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;

import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;

public class ChartActivity extends AppCompatActivity {

    @Bind(R.id.tv_name)
    TextView tvName;
    @Bind(R.id.chart)
    LineChart chart;
    @Bind(R.id.tv_suggest)
    TextView tvSuggest;

    HealthBean bean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chart);
        ButterKnife.bind(this);
        bean= getIntent().getParcelableExtra("data");
        tvName.setText(bean.getName());
        tvSuggest.setText(bean.getSuggest());
        initChart(chart);
        notifyDataSetChanged(chart, bean);

    }

    /**
     * 初始化图表
     *
     * @param chart 原始图表
     * @return 初始化后的图表
     */
    public LineChart initChart(LineChart chart) {
        // 不显示数据描述
        chart.getDescription().setEnabled(false);
        // 没有数据的时候，显示“暂无数据”
        chart.setNoDataText("暂无数据");
        // 显示表格颜色
        chart.setDrawGridBackground(true);
        chart.setGridBackgroundColor(Color.rgb(250, 104, 104));
        // 不可以缩放
        chart.setScaleEnabled(false);
        // 不显示y轴右边的值
        chart.getAxisRight().setEnabled(false);
        // 不显示图例
        Legend legend = chart.getLegend();
        legend.setEnabled(false);
        // 向左偏移15dp，抵消y轴向右偏移的30dp
        chart.setExtraLeftOffset(0);
        chart.setExtraBottomOffset(10);

        XAxis xAxis = chart.getXAxis();
        xAxis.setAvoidFirstLastClipping(true); //设置x轴起点和终点label不超出屏幕
        xAxis.setLabelCount(bean.getData1().size()-1);
        xAxis.setAxisMinimum(0);
        // 显示x轴
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawGridLines(true);

        // 设置x轴数据的位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setTextColor(Color.BLACK);
        xAxis.setTextSize(12);
        xAxis.setGridColor(Color.parseColor("#30FFFFFF"));
        // 设置x轴数据偏移量
        xAxis.setYOffset(10);

        YAxis yAxis = chart.getAxisLeft();
        // 显示y轴
        yAxis.setDrawAxisLine(true);
        // 设置y轴数据的位置
        yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
        // 从y轴发出横向直线
        yAxis.setDrawGridLines(true);
        yAxis.setTextColor(Color.BLACK);
        yAxis.setTextSize(12);
        xAxis.setGridColor(Color.parseColor("#30FFFFFF"));
        // 设置y轴数据偏移量
        yAxis.setXOffset(10);
        yAxis.setYOffset(0);

        //Matrix matrix = new Matrix();
        // x轴缩放1.5倍
        //matrix.postScale(1.5f, 1f);
        // 在图表动画显示之前进行缩放
        //chart.getViewPortHandler().refresh(matrix, chart, false);
        // x轴执行动画
        //chart.animateX(2000);
        chart.invalidate();
        return chart;
    }

    /**
     * 设置图表数据
     *
     * @param chart  图表
     * @param values 数据
     */
    public void setChartData(LineChart chart, HealthBean values) {
        LineDataSet lineDataSet1,lineDataSet2,lineDataSet3=null;
        LineData data = new LineData();
        if (values.getData1()!=null){
            lineDataSet1 = getLineDataSet(values.getData1(),0);
            data.addDataSet(lineDataSet1);
        }
        if (values.getData2()!=null){
            lineDataSet2 = getLineDataSet(values.getData2(),1);
            data.addDataSet(lineDataSet2);
        }
        if (values.getData3()!=null){
            lineDataSet3 = getLineDataSet(values.getData3(),2);
            data.addDataSet(lineDataSet3);
        }
            chart.setData(data);
            chart.invalidate();
    }
    int[] mColors = new int[] {
            Color.rgb(137, 230, 81),
            Color.rgb(240, 240, 30),
            Color.rgb(89, 199, 250),
            Color.rgb(250, 104, 104)
    };
    int[] years = new int[] {
            2014,
            2015,
            2016,
            2017
    };
    @NonNull
    private LineDataSet getLineDataSet(List<Entry> values, int num) {
        LineDataSet lineDataSet1;
        lineDataSet1 = new LineDataSet(values, "");
        lineDataSet1.setValueTextSize(10);
        // 设置曲线颜色
        lineDataSet1.setColor(mColors[num%4]);
        lineDataSet1.setLineWidth(3);
        // 设置平滑曲线
        lineDataSet1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        // 显示坐标点的小圆点
        lineDataSet1.setDrawCircles(true);
        lineDataSet1.setCircleHoleRadius(5);
        // 显示坐标点的数据
        lineDataSet1.setDrawValues(true);
        // 显示定位线
        lineDataSet1.setHighlightEnabled(true);
        return lineDataSet1;
    }

    /**
     * 更新图表
     *
     * @param chart     图表
     * @param values    数据
     */
    public void notifyDataSetChanged(LineChart chart, HealthBean values) {
        chart.invalidate();
        setChartData(chart, values);
    }


}
